//package com.yc.web;
//
//import com.yc.dto.Result;
//import com.yc.entity.Mgoods;
//import com.yc.entity.Morder;
//import com.yc.entity.Promotion;
//import com.yc.entity.Promotiondetail;
//
//import com.yc.util.JwtUtil;
//import com.yc.web.feign.DacuControllerFeign;
//import io.jsonwebtoken.Claims;
//import org.springframework.amqp.rabbit.core.RabbitTemplate;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.data.redis.core.ValueOperations;
//import org.springframework.scheduling.TaskScheduler;
//import org.springframework.web.bind.annotation.CookieValue;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import java.math.BigDecimal;
//import java.sql.Timestamp;
//import java.util.Set;
//import java.util.stream.Collectors;
//
//@RestController
//@RequestMapping("dacu")
//public class DaCuController {
//    @Autowired
//    DacuControllerFeign dacuControllerFeign;
//    @Autowired
//    RedisTemplate redisTemplate;
//    @Autowired
//    private TaskScheduler taskScheduler;
//    void begin(){
//        System.out.println("=======活动开始了=====");
//        Promotion p= (Promotion)redisTemplate.opsForValue().get("promotion");
//        ValueOperations opsForValue=redisTemplate.opsForValue();
//        for (Promotiondetail detail:p.getDetails()){
//            opsForValue.set("promotion:p_"+detail.getMgoods().getGid(),detail.getNums());
//        }
//        redisTemplate.opsForValue().set("promotion.begin",true);
//
//
//        dacuControllerFeign.begin(p.getPid());
//        p.setStatus(1);
//        redisTemplate.opsForValue().set("promotion",p);
//    };
//    void end(){
//        System.out.println("=======活动结束了=====");
//        Promotion p= (Promotion)redisTemplate.opsForValue().get("promotion");
//
//
//        dacuControllerFeign.end(p);
//        Set keys=redisTemplate.keys("*promotion*");
//        for (Object key :keys){
//            redisTemplate.delete(key);
//        }
//    };
//    @RequestMapping("reday")
//    Result ready(){
//        //获取最近一次促销记录
//        Promotion promotion=dacuControllerFeign.getNoBegin();
//        //将促销数据存入redis
//        redisTemplate.opsForValue().set("promotion",promotion);
//
//        promotion.setBegin(new Timestamp(System.currentTimeMillis()+1000*10));
//        promotion.setEnd(new Timestamp(System.currentTimeMillis()+1000*20));
//
//
//        //启动定时任务：开始+结束
//        taskScheduler.schedule(()->{
//            begin();
//        },promotion.getBegin());
//
//        taskScheduler.schedule(()->{
//            end();
//        },promotion.getEnd());
//        return new Result(1,"大促活动已启动",promotion);
//    }
//
//    @RequestMapping("commit")
//    Result commit(Morder morder, @CookieValue(required = false)String loginToken){
//        if (redisTemplate.hasKey("promotion")==false){
//            return Result.error(-3,"秒杀活动已结束");
//
//        }
//        if(redisTemplate.hasKey("promotion.begin")==false){
//            return Result.error(-4,"秒杀活动未开始");
//
//        }
//        if (loginToken==null){
//            return Result.error(-1,"请先登录系统");
//        }
//        int uid = 0;
//        //获取用户id
//        Claims claims= JwtUtil.parseJWT(loginToken);
//        Object id=claims.get("id");
//        uid=Integer.parseInt(id+"");
//
//
//        //减库存
//        ValueOperations opsForValue=redisTemplate.opsForValue();
//
//        //判断商品是否已经秒杀过
//        if (redisTemplate.hasKey("promtion:p_"+morder.getGid()+":u_"+uid)){
//            return Result.error(-2,"你已经秒杀过该商品");
//
//        }
//
//
//
//
//
//        Integer nums= (Integer) opsForValue.get("promotion:p_"+morder.getGid());
//        if (nums==null){
//            return Result.error(-5,"该商品未参与秒杀");
//        }
//        nums-=morder.getQuantity();
//        opsForValue.set("promotion:p_"+morder.getGid(),nums);
//
//        opsForValue.set("promtion:p_"+morder.getGid()+":u_"+uid,1);
//
//        //发送MQ消息
//        morder.setUid(uid);
//        Promotion promotion= (Promotion) opsForValue.get("promotion");
//        BigDecimal price=promotion.getDetails()
//                .stream()
//                .filter(d->d.getMgoods()
//                        .getGid().equals(morder.getGid()))
//                .collect(Collectors.toList())
//                .get(0).getPrice();
//        morder.setTotalprice(new BigDecimal(morder.getQuantity()).multiply(price));
//        rabbitTemplate.convertAndSend("promotionQueue",morder);
//
//
//
//
//        return Result.ok("秒杀成功");
//    }
//    @Autowired
//    RabbitTemplate rabbitTemplate;
//
//    @RequestMapping("getPromotion")
//    Promotion getPromotion(){
//        Promotion p= (Promotion)redisTemplate.opsForValue().get("promotion");
//        return p;
//
//    }
//}
